#ifndef __PID_H
#define __PID_H

//#include "sys.h"

#include <stdint-gcc.h>

/**
  * @brief  PID参数结构体定义
  */
typedef struct {
    int target; 													//定义设定值
    int current; 													//定义当前实际值
    int err;					 										//定义偏差值
    int err_last; 												//定义上一个偏差值
    float Kp,Ki,Kd; 												//定义比例、积分、微分系数
    float p_out;														//定义P项输出
    float i_out;														//定义I项输出
    float d_out;														//定义D项输出
    int PID_total_out; 										//定义PID执行输出
    int integral; 												//定义积分值
    int differentiation;
/*-----------------------积分限幅---------------------------*/
    int integral_limit;										    //定义积分限幅值

/*-----------------------积分分离---------------------------*/
    int integral_separation_limit;                    //定义积分分离限制幅度，当偏差大于这个限度时，不进行积分累加

/*-----------------------微分限幅---------------------------*/
    int differentiation_limit;                    //定义微分限制幅度

}PID_BASESTR;  									//目前定义了两个pid环


/*3508双环PID*/
extern PID_BASESTR PID_PAW_SPD;      //3508内环
extern PID_BASESTR PID_PAW_POS;      //3508外环

extern PID_BASESTR PID_RISE_SPD;       //升降电机位置环
extern PID_BASESTR PID_RISE_POS;       //升降电机位置环

extern PID_BASESTR PID_3508_POS_KEEP;      //3508
//以下为函数声明
void PID_Set(PID_BASESTR *PID, float kp, float ki, float kd,
             int integral_limit, int integral_separation_limit, int differentiation_limit);
int16_t PID_realise(PID_BASESTR *PID, int target, int current, int max_output);



#endif

